var async = require('async');
//商品有关的模型
var ProM = require('../models/product');
//分类有关的模型
var ClzM = require('../models/classify');

module.exports = {
    /**
     * 分类主页
     */
    index:function(req,res,next){
        async.waterfall([
            //获取用户可见的分类列表，没有异常继续执行，异常需要catch
            function(callback){
                ClzM.listVisible().then(function(clzs){
                    callback(null,clzs);
                }).catch(function(err){
                    callback(err);
                });
            },
            //根据分类简码获取分类id
            function(clzs,callback){
                ClzM.getByName('grrm').then(function(classify){
                    callback(null,clzs,classify);
                }).catch(function(err){
                    callback(err);
                });
            },
            //根据分类code查询默认商品列表，没有异常继续执行，异常需要catch
            function(clzs,classify,callback){
                var classifyId =  classify.id;
                ProM.listByClassifyId(classifyId).then(function(pros){
                    callback(null,{classifys:clzs,products:pros});
                }).catch(function(err){
                    callback(err);
                });
            },
        ],function(err,result){
            if(err){
                //TODO
                return;
            }else{
                // 跳转分类主页
                res.render('classify/classify',{title:'商品分类',classifys:result.classifys,products:result.products});
            }
        });
    },
    /**
     * 根据商品名称模糊搜索商品
     */
    searchForm:function(req,res,next) {
        //业务操作
        var name = req.body.name;
        ProM.searchByName(name).then(function (products) {
            res.render('classify/productSearch', {title: '商品搜索', products: products,proName:name});
        }).catch(function (err) {
            //异常处理
        })
    },
    /**
     * 根据商品名称模糊搜索商品
     */
    search:function(req,res,next) {
        //业务操作
        var name = req.params.name;
        ProM.searchByName(name).then(function (products) {
            res.render('classify/productSearch', {title: '商品搜索', products: products,proName:name});
        }).catch(function (err) {
            //异常处理
        })
    },
    /**
     * 根据商品名称模糊搜索商品
     */
    searchRm:function(req,res,next) {
        //业务操作
        var name = req.params.name;
        ProM.searchByNameRm(name).then(function (products) {
            res.render('classify/productSearchRm', {title: '商品搜索', products: products,proName:name});
        }).catch(function (err) {
            //异常处理
        })
    },
    /**
     * 根据商品名称模糊搜索商品
     */
    searchJg:function(req,res,next) {
        //业务操作
        var name = req.params.name;
        ProM.searchByNameJg(name).then(function (products) {
            res.render('classify/productSearchJg', {title: '商品搜索', products: products,proName:name});
        }).catch(function (err) {
            //异常处理
        })
    },
    /**
     * 根据分类ID查询商品列表
     */
    listByClassifyId:function(req,res,next){
        //业务操作
        var classifyId = req.params.classifyId;
        async.waterfall([
            function(callback){
                if(classifyId){
                    ClzM.get(classifyId).then(function(classify){
                        callback(null,classify);
                    }).catch(function(err){
                        callback(err);
                    });
                }else{
                    return;
                }
            },
            //根据分类id查询默认商品列表，没有异常继续执行，异常需要catch
            function(classify,callback){
                var classifyTitle =  classify.get('title');
                ProM.listByClassifyId(classifyId).then(function(products){
                    callback(null,{products:products,classifyTitle:classifyTitle});
                }).catch(function(err){
                    callback(err);
                });
            },
        ],function(err,result){
            if(err){
                //TODO
                return;
            }else{
                // 跳转分类主页
                res.render('classify/productList',{title:result.classifyTitle,products:result.products,clzId:classifyId});
            }
        });
    },
    /**
     * 根据分类ID查询商品列表按销量排序
     */
    listByClassifyIdRm:function(req,res,next){
        //业务操作
        var classifyId = req.params.classifyId;
        async.waterfall([
            function(callback){
                if(classifyId){
                    ClzM.get(classifyId).then(function(classify){
                        callback(null,classify);
                    }).catch(function(err){
                        callback(err);
                    });
                }else{
                    return;
                }
            },
            //根据分类id查询默认商品列表，没有异常继续执行，异常需要catch
            function(classify,callback){
                var classifyTitle =  classify.get('title');
                ProM.listByClassifyIdRm(classifyId).then(function(products){
                    callback(null,{products:products,classifyTitle:classifyTitle});
                }).catch(function(err){
                    callback(err);
                });
            },
        ],function(err,result){
            if(err){
                //TODO
                return;
            }else{
                // 跳转分类主页
                res.render('classify/productListRm',{title:result.classifyTitle,products:result.products,clzId:classifyId});
            }
        });
    },
    /**
     * 根据分类ID查询商品列表按价格升序排序
     */
    listByClassifyIdJg:function(req,res,next){
        //业务操作
        var classifyId = req.params.classifyId;
        async.waterfall([
            function(callback){
                if(classifyId){
                    ClzM.get(classifyId).then(function(classify){
                        callback(null,classify);
                    }).catch(function(err){
                        callback(err);
                    });
                }else{
                    return;
                }
            },
            //根据分类id查询默认商品列表，没有异常继续执行，异常需要catch
            function(classify,callback){
                var classifyTitle =  classify.get('title');
                ProM.listByClassifyIdJg(classifyId).then(function(products){
                    callback(null,{products:products,classifyTitle:classifyTitle});
                }).catch(function(err){
                    callback(err);
                });
            },
        ],function(err,result){
            if(err){
                //TODO
                return;
            }else{
                // 跳转分类主页
                res.render('classify/productListJg',{title:result.classifyTitle,products:result.products,clzId:classifyId});
            }
        });
    },
    /**
     * 根据分类简码code查询商品列表
     */
    listByClassifyCode:function(req,res,next){
        var classCode = req.params.classifyCode;
        async.waterfall([
            //根据分类简码获取分类id
            function(callback){
                if(classCode){
                    ClzM.getByName(classCode).then(function(classify){
                        callback(null,classify);
                    }).catch(function(err){
                        callback(err);
                    });
                }else{

                }
            },
            //根据分类code查询默认商品列表，没有异常继续执行，异常需要catch
            function(classify,callback){
                var classifyId =  classify.id;
                var classifyTitle = classify.get('title');
                ProM.listByClassifyId(classifyId).then(function(pros){

                    callback(null,{products:pros,classifyId:classifyId,classifyTitle:classifyTitle});
                }).catch(function(err){
                    callback(err);
                });
            },
        ],function(err,result){
            if(err){
                //TODO
                return;
            }else{
                // 跳转分类主页
                res.render('classify/productList',{title:result.classifyTitle,products:result.products,clzId:result.classifyId});
            }
        });
    },
    /**
     * 获取全部商品
     */
    getAllProduct:function(req,res,next){
        ProM.getAll().then(function(products){
            res.render('classify/productListAll',{title:'全部商品',products:products});
        }).catch(function(err){

        });
    },
    /**
     * 获取全部商品按销量排序
     */
    getAllProductRm:function(req,res,next){
        ProM.getAllRm().then(function(products){
            res.render('classify/productListAllRm',{title:'全部商品',products:products});
        }).catch(function(err){

        });
    },
    /**
     * 获取全部商品按价格升序
     */
    getAllProductJg:function(req,res,next){
        ProM.getAllJg().then(function(products){
            res.render('classify/productListAllJg',{title:'全部商品',products:products});
        }).catch(function(err){

        });
    },

    getClassifyProductListAjax:function(req,res){
        console.log("------------------------------- controllers method:getClassifyProductListAjax");
        var page = req.query.page;
        var sort = req.query.sort;
        var ProductArray = new Array();
        async.waterfall([
            //获取用户可见的分类列表，没有异常继续执行，异常需要catch
            function(callback){
                ClzM.listVisible().then(function(clzs){
                    callback(null,clzs);
                }).catch(function(err){
                    callback(err);
                });
            },
            //获取真实数据
            function(clzs,callback){
                ProM.getAllLimit(page,sort).then(function (result) {
                    var imgArray;
                    if (result.length > 0) {
                        for (x in result) {
                            imgArray = JSON.parse(result[x].get('picurlarray'));//读取商品图片数组
                            ProductArray.push(
                                {
                                    //返回到前端的购物车商品数据
                                    objectId: result[x].id,
                                    name: result[x].get('name'),
                                    img: imgArray[0],
                                    minSpecName: result[x].get('minSpecName'),
                                    intro: result[x].get('intro'),
                                    minPrice: result[x].get('minPrice'),
                                    commentCount: result[x].get('commentCount'),
                                    minSpec: result[x].get('minSpec'),
                                }
                            )
                        }
                    }
                    var jsonresult = {ProductArray: ProductArray};
                    callback(null,jsonresult);
                }).catch(function(err){
                    callback(err);
                });
            },
        ],function(err,result){
            if(err){
                //TODO
                return;
            }else{
                res.json(result);
            }
        });
    },

    getClassifyProductLimit:function(req,res){
        console.log("---------------------controllers metgod:getClassifyProductLimit");
        res.render('classify/productListAllLimit',{title:'全部商品'});
    },
};
